package BehavioralPattern.ChainOfResp;


/**
 * @Classname : LeaderHandler
 * @Description : 抽象处理者
 * @Author : chentianyu
 * @Date 2023/3/5 10:14
 */


public abstract class Handler {

    private Handler nextHandler;  // 责任链的下一个责任人

    // 处理请求，自己不能处理则传递到下一个责任人
    public final void handleRequest(Request request) {
        if (isResponsible(request)) {
            // 情况1：在自己职责范围内，则自己处理
            this.response(request);
        } else {
            // 情况2：不在自己职责范围内 且 存在下一个责任人，则由下一个责任人处理
            if (this.nextHandler != null) {
                this.nextHandler.handleRequest(request);
            }
            // 情况3：不在自己职责范围内 且 不存在下一个责任人，则走默认处理方式
            else {
                System.out.println("请假天数【" + request.getType() + "】没地方请示，按不同意处理");
            }
        }

    }

    // 设置下一个责任人
    public void setNext(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    // 实现职责范围
    protected abstract boolean isResponsible(Request request);

    // 响应请求
    protected abstract void response(Request request);
}
